前一篇提到,我們在聊 PATH 是說電腦要知道可以執行 java 指令的程式放在哪裡(路徑),
那 CLASSPATH 呢?
前幾篇有說到,JVM 只看得懂 .class,java 指令就是在啟動 JVM,
當執行 java 指令時,JVM 也會根據當下的程式目錄去尋找 .class檔,但如果找不到 .class 檔,
就會發生下面的狀況
但我們可以手動去設定 CLASSPATH,告訴 JVM .class 放在哪裡,java -classpath {路徑}
或是簡寫 java -cp {路徑}
就像:
一樣也可以執行我們第二天的範例類別哦!
但是這樣每次想執行 java 指令的時候都要特地寫上 -cp or -classpath 去做設定太麻煩了,
如果是很常用的路徑,也可以透過設定環境變數 CLASSPATH ,設定一次之後不管在哪個目錄下都可以用了!
我們來整理一下 PATH 跟 CLASSPATH 兩個的差別~
作業系統 | 搜尋路徑 | 可執行檔 |
---|---|---|
Windows、Mac OS | PATH | .exe、.bat、Unix執行檔 |
JVM | CLASSPATH | .class |
而且還有一件事情,我們是透過 javac 的指令來進行編譯產生 .class 檔案,
如果程式碼裡面有使用到其他的類別程式的時候,也要指定 CLASSPATH,
讓 javac 編譯器知道要去哪裡尋找額外使用的類別哦!
我有兩個 .java 檔案 分別內容為:
目錄結構如下
卻說找不到我的 Utils.class
這時候就要設定 CLASSPATH ,再執行一次!javac -cp classes MyHelloWorld.java
java MyHelloWorld
結果又錯了,又跟我說找不到 Utils.class
這時候就要設定 CLASSPATH ,再執行一次!java -cp .:classes MyHelloWorld
step 2 是針對 javac
step 3 是針對 java(JVM),
他們對象不同哦~